package com.sg.file.receive.provider.util.creator;

import com.sg.file.common.conf.FileConfiguration;
import com.sg.file.receive.api.dto.FileCreateDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 文件信息生成类
 * Created by asus on 2018/7/8.
 */
@Component
public class FileInfoCreator {
    @Autowired
    private FileConfiguration fileConfiguration;

    /**
     * 生成文件信息
     * @param  fileId 文件id
     * @param proName 项目名称 文件路径的一部分
     * @param fileContentType 文件分类（image,video,audio,other）
     * @param fileSizeType 文件尺寸类型(o:原文件,l：大尺寸文件,m：中等尺寸文件,s：小尺寸文件,t：缩略图，b：备份)
     * @param fileName 原文件名称
     * @param fileSize 文件大小
     * @return
     */
    public FileCreateDTO getInfo(String fileId,String proName, String fileContentType, String fileSizeType,
                                 String fileName, Long fileSize){
        //获取文件转换信息
        FileConfiguration.TransformInfo transformInfo = getFileTranformInfo(fileContentType);

        //配置路径
        FileConfiguration.PathConf pathConf = fileConfiguration.getPath();
        //获取当前时间
        Long systemTime = System.currentTimeMillis();
        //生成文件ID
        if(StringUtils.isEmpty(fileId)) {
            fileId = new RandomFileIdCreator(systemTime, transformInfo.getIdPrefix()).getId();
        }
        //根据文件内容的类型获取文件分类
        String FileType = transformInfo.getSaveDirName();
        //根据文件名称通过split('.')获取文件名称和后缀的字符串数组
        String[] filenameStrs= getFileNameArr(fileName);

        //返回的完整文件信息
        FileCreateDTO fileInfo = new FileCreateDTO();
        fileInfo.setInDate(systemTime);
        fileInfo.setFileId(fileId);
        fileInfo.setFileType(FileType);
        fileInfo.setFileSize(fileSize);
        fileInfo.setProjectName(proName);
        //文件原名称
        fileInfo.setOriginalFileName(filenameStrs[0]);
        //文件后缀
        fileInfo.setFileSuffix(filenameStrs[1]);
        //生成存储后的文件名
        fileInfo.setSaveFileName(fileId);
        //生成文件路径
        fileInfo.setFilePath(PathCreator.create(fileInfo,pathConf.getBase(),fileSizeType));
        return fileInfo;
    }

    /**
     * 获取文件分类
     * @param fileContentType
     * @return
     */
    public FileConfiguration.TransformInfo getFileTranformInfo(String fileContentType){
        List<FileConfiguration.TransformInfo> transformInfos = fileConfiguration.getTransformInfos();
        for(FileConfiguration.TransformInfo transformInfo:transformInfos){
            //把其他类型的地址获取出来
            if(transformInfo.getType().indexOf("other")!=-1){
                return transformInfo;
            }

            if(fileContentType.indexOf(transformInfo.getType())!=-1){
                return transformInfo;
            }
        }
        return null;
    }

    /**
     * 根据文件名称通过split('.')获取文件名称和后缀的字符串数组
     * @param fileName
     * @return
     */
    private String[] getFileNameArr(String fileName){
        if(StringUtils.isEmpty(fileName)){
            return null;
        }

        String filenameStrs[] = StringUtils.split(fileName,'.');

        if(filenameStrs==null||filenameStrs.length<2){
            return null;
        }
        return filenameStrs;
    }

}
